package ar.edu.caece.pl.asin.model.impl;

import ar.edu.caece.pl.alex.model.IToken;
import ar.edu.caece.pl.alex.model.impl.Token;
import ar.edu.caece.pl.asin.manager.IAnalizadorSintactico;
import ar.edu.caece.pl.asin.manager.impl.AbstractAnalizadorSintactico;
import ar.edu.caece.pl.asin.model.ITokenStream;

public class ShowElementNext extends AbstractAnalizadorSintactico implements IAnalizadorSintactico {
	
	/* INICIALIZACION */	
	public ShowElementNext ( ITokenStream ts ) {
		super(ts, false);
	}
	public ShowElementNext ( ITokenStream ts, boolean debugMode ) {
		super(ts,debugMode);
	}
	
	
	/** 
	 * Devuelve true si reconoce multiples parametros en la llamada a show y showln
	 */
	public boolean reconocer () {

		boolean recognized = true; //(asumimos correctitud hasta demostrar lo contrario)
		
		//----------------------------------------------
		//Agrego info de debug de la produccion
		em.debug( "Reconocer <SHOW_ELEM_NEXT>:" );		//TODO pasarlo a accion semantica
		//----------------------------------------------
		
		/* <SHOW_ELEM_NEXT> -> , <SHOW_ELEM> | 
                   				 LAMBDA	     */
		
		if ( this.getTokenSiguiente().equals( new Token(IToken.TYPE_COMA ) ) ) {
			
			// <SHOW_ELEM_NEXT> -> , <SHOW_ELEM>
			
			//----------------------------------------------
			//Agrego info de debug de la produccion
			em.debug( "<SHOW_ELEM_NEXT> → , <SHOW_ELEM>", this.getTokenSiguiente() );
			//----------------------------------------------
			
			if( !this.reconocerToken(IToken.TYPE_COMA) ) {
				return false;
			}
			//Listo, cierra el bucle de Sentencia con ShowElem y ShowElemNext
		}
		return recognized;
	}
	
	public static boolean primeros(IToken token) {
		return  token.equals( new Token(IToken.TYPE_COMA) );
	}
}
